/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_httpd.htm
 *
 * Zhiqim Httpd is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.httpd.nio;

import java.io.IOException;
import java.nio.ByteBuffer;

import javax.net.ssl.SSLEngine;

import org.zhiqim.httpd.HttpConnection;
import org.zhiqim.httpd.HttpException;
import org.zhiqim.httpd.HttpHeaderAbs;
import org.zhiqim.httpd.HttpInputStream;
import org.zhiqim.httpd.HttpRequestAbs;
import org.zhiqim.httpd.HttpSenderImpl;

/**
 * NIO请求头
 *
 * @version v1.4.0 @author zouzhigang 2018-3-27 新建与整理
 * @version v1.5.0 @author zouzhigang 2018-9-12 和BIO请求头抽象到HttpHeaderAbs中
 */
public class HttpNioHeader extends HttpHeaderAbs
{
    /** 构造函数 */
    public HttpNioHeader (HttpConnection conn)
    {
        this(conn, null);
    }
    
    /** 构造函数 */
    public HttpNioHeader (HttpConnection conn, SSLEngine sslEngine)
    {
        super(conn, new HttpInputStream(), sslEngine);
    }
    
    /*****************************************************************************/
    //实现不同的IO对应的抽象方法
    /*****************************************************************************/
    
    public HttpSenderImpl newSender()
    {
        return new HttpSenderImpl(this, false);
    }
    
    public HttpRequestAbs newRequest()
    {
        return new HttpNioRequest(this);
    }
    
    public boolean isBio()
    {
        return false;
    }
    
    /*****************************************************************************/
    //NIO/AIO对应的缓冲处理
    /*****************************************************************************/
    
    /** 
     * 加入缓冲列表
     * 
     * @param buf                   有缓冲数据
     * @exception HttpException     HTTP异常
     * @exception IOException       IO异常
     */
    public void addBuffer(ByteBuffer buf)
    {
        //1.第一步，把缓冲加到流中
        getInputStream().addBuffer(buf);
    }
}
